//
//  HMTabBar.swift
//  sina
//
//  Created by 崔正强 on 17/3/19.
//  Copyright © 2017年 崔正强. All rights reserved.
//

import UIKit

class HMTabBar: UITabBar {

    //按钮的点击事件的闭包
    var clickClosure: ((HMTabBar) -> ())?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        //添加 + 按钮
        setupUI()
    }
    
    //通过解档的方式获取一个视图控件
    //通过xib创建空间会调用该方法
    required init?(coder aDecoder: NSCoder){
        super.init(coder: aDecoder)
        //将自定义的操作写到这个地方来
        setupUI()
    }
    
    private func setupUI() {
        self.addSubview(plusBtn)
        
        //添加监听事件
        plusBtn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
    }
    
    //一旦给通过消息机制调用的方法添加了 骗人艾特关键字修改 那么该方法就成为了一个决定私有的方法,并且对运行时不可见
    @objc private func btnClick() {
        //执行闭包
        clickClosure?(self)
    }
    
    //修改一个控件上同一个类型的额空间的frame
    //需要在layoutSubviws方法中完成对frame的修改
    override func layoutSubviews() {
        super.layoutSubviews()
        let w = self.bounds.size.width / 5
        let h = self.bounds.height
        
        //1. 遍历tabbar上所有的子视图
        var index = 0
        for subView in subviews {
            //2.判断子试图的类型是不是需要的类型
            if subView.isKind(of: NSClassFromString("UITabBarButton")!) {
                //3.如果是就完成对frame的修改
                subView.frame = CGRect(x: w * CGFloat(index), y: 0, width: w, height: h)
                
                index += (index == 1 ? 2 : 1)
            }
        }
        
        //设置加号按钮的frame
        plusBtn.center = CGPoint(x: self.center.x, y: self.bounds.height * 0.5)
        plusBtn.bounds.size = CGSize(width: w, height: h)
    }
    
    //通过懒加载得到加号按钮
    lazy var plusBtn: UIButton = {
        //UIButton()是自定义样式的按钮
        let btn = UIButton()
        
        //设置图片 和背景图片
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add"), for: .normal)
        btn.setImage(#imageLiteral(resourceName: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button"), for: .normal)
        btn.setBackgroundImage(#imageLiteral(resourceName: "tabbar_compose_button_highlighted"), for: .highlighted)
        return btn;
    }()

}
